home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / andy.lha / MutantMarine.s < prev    next >
Text File  |  1995-09-15  |  15KB  |  960 lines

  1. ItsAMutantMarine:
  2.  
  3.  tst.b NASTY
  4.  bne .yesnas
  5.  move.w #-1,12(a0)
  6.  rts
  7. .yesnas:
  8.  
  9.  move.w #$1f1f,14(a0)
  10.  
  11.  move.b worry(a0),d0
  12.  move.b d0,d1
  13.  and.w #128,d1
  14.  and.b #127,d0
  15.  sub.b #1,d0
  16.  bge.s .oknn
  17.  move.b #0,d0
  18. .oknn: 
  19.  add.b d0,d1
  20.  move.b d1,worry(a0)
  21.  
  22.  move.w (a0),CollId
  23.  move.w #80,extlen
  24.  move.b #1,awayfromwall
  25.  
  26.  move.l #20*256,StepUpVal
  27.  move.l #20*256,StepDownVal
  28.  move.l #128*128,thingheight
  29.  move.l #4,deadframe
  30.  move.w #0,screamsound
  31.  move.w #64,nasheight
  32.  clr.b gotgun
  33.  move.w 12(a0),d2
  34.  bge.s .stillalive
  35. .notthisone:
  36.  move.w 12(a0),GraphicRoom(a0)
  37.  rts
  38. .stillalive:
  39.  
  40.  tst.b numlives(a0)
  41.  bgt .notdying
  42.  
  43.  move.w ThirdTimer(a0),d1
  44.  sub.w TempFrames,d1
  45.  bge.s .noneg
  46.  move.w #0,d1
  47. .noneg:
  48.  move.w d1,ThirdTimer(a0)
  49.  
  50.  move.w .dyinganim(pc,d1.w*2),10(a0)
  51.  
  52.  move.b #0,numlives(a0)
  53.  move.l ZoneAdds,a1
  54.  move.l (a1,d2.w*4),a1
  55.  add.l LEVELDATA,a1
  56.  
  57.  move.l ToZoneFloor(a1),d0
  58.  tst.b ObjInTop(a0)
  59.  beq.s .notintopp
  60.  move.l ToUpperFloor(a1),d0
  61. .notintopp:
  62.  asr.l #7,d0
  63.  sub.w #64,d0
  64.  move.w d0,4(a0)
  65.  move.w 12(a0),GraphicRoom(a0)
  66.  rts
  67.  
  68. .dyinganim:
  69.  dcb.w 6,18
  70.  dcb.w 10,17
  71.  dcb.w 10,16
  72.  
  73. .notdying: 
  74.  
  75.  tst.b 17(a0)
  76.  beq.s .cantseeplayer
  77.  tst.w ThirdTimer(a0)
  78.  ble MutMarAttack
  79.  move.w TempFrames,d0
  80.  sub.w d0,ThirdTimer(a0)
  81.  bra .waitandsee
  82.  
  83. .cantseeplayer:
  84.  
  85.  jsr GetRand
  86.  lsr.w #4,d0
  87.  and.w #63,d0
  88.  add.w #20,d0
  89.  move.w d0,ThirdTimer(a0)
  90.  
  91. .waitandsee:
  92.  
  93.  move.w #25,FourthTimer(a0)
  94.  
  95.  move.w 12(a0),d2
  96.  move.l ZoneAdds,a5
  97.  move.l (a5,d2.w*4),d0
  98.  add.l LEVELDATA,d0
  99.  move.l d0,objroom
  100.  
  101.  jsr ViewpointToDraw
  102.  
  103.  asl.l #2,d0
  104.  add.w alframe+2,d0
  105.  add.l #$000a0000,d0
  106.  move.l d0,8(a0)
  107.  
  108.  move.w 4(a0),d0
  109.  sub.w #64,d0
  110.  ext.l d0
  111.  asl.l #7,d0
  112.  move.l d0,newy
  113.  move.l d0,oldy
  114.  
  115.  move.w 12(a0),FromZone
  116.  jsr CheckTeleport
  117.  tst.b OKTEL
  118.  beq.s .notel
  119.  move.l floortemp,d0
  120.  asr.l #7,d0
  121.  add.w d0,4(a0)
  122.  bra .nochangedir
  123. .notel:
  124.  
  125.  move.w maxspd(a0),d2
  126.  muls TempFrames,d2
  127.  move.w d2,speed
  128.  move.w Facing(a0),d0
  129.  move.b ObjInTop(a0),StoodInTop
  130.  movem.l d0/a0/a1/a3/a4/d7,-(a7)
  131.  jsr GoInDirection
  132.  move.w #%1000000000,wallflags
  133.  
  134.  move.l #%11111111110111100001,CollideFlags
  135.  jsr Collision
  136.  tst.b hitwall
  137.  beq.s .canmove
  138.  
  139.  move.w oldx,newx
  140.  move.w oldz,newz
  141.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  142.  bra .hitathing
  143.  
  144. .canmove:
  145.  
  146.  clr.b wallbounce
  147.  jsr MoveObject
  148.  movem.l (a7)+,d0/a0/a1/a3/a4/d7
  149.  move.b StoodInTop,ObjInTop(a0)
  150.  
  151. .hitathing:
  152.  
  153.  tst.b hitwall
  154.  beq.s .nochangedir
  155.  move.w #-1,ObjTimer(a0)
  156. .nochangedir
  157.  
  158.  move.l objroom,a2
  159.  move.w (a2),12(a0)
  160.  move.w newx,(a1)
  161.  move.w newz,4(a1)
  162.  
  163.  move.w (a2),d0
  164.  move.l #ZoneBrightTable,a5
  165.  move.l (a5,d0.w*4),d0
  166.  tst.b ObjInTop(a0)
  167.  bne.s .okbit
  168.  swap d0
  169. .okbit:
  170.  move.w d0,2(a0)
  171.  
  172.  move.l ToZoneFloor(a2),d0
  173.  tst.b ObjInTop(a0)
  174.  beq.s .notintop
  175.  move.l ToUpperFloor(a2),d0
  176. .notintop:
  177.  asr.l #7,d0
  178.  sub.w #64,d0
  179.  move.w d0,4(a0)
  180.  
  181.  moveq #0,d2
  182.  move.b damagetaken(a0),d2
  183.  beq .noscream
  184.  
  185.  sub.b d2,numlives(a0)
  186.  bgt .notdeadyet
  187.  
  188.  cmp.b #1,d2
  189.  ble .noexplode
  190.  
  191.  movem.l d0-d7/a0-a6,-(a7)
  192.  sub.l ObjectPoints,a1
  193.  add.l #ObjRotated,a1
  194.  move.l (a1),Noisex
  195.  move.w #400,Noisevol
  196.  move.w #14,Samplenum
  197.  move.b #1,chanpick
  198.  clr.b notifplaying
  199.  st backbeat
  200.  move.b 1(a0),IDNUM
  201.  jsr MakeSomeNoise
  202.  movem.l (a7)+,d0-d7/a0-a6
  203.  
  204.  movem.l d0-d7/a0-a6,-(a7)
  205.  move.w #0,d0
  206.  asr.w #2,d2
  207.  tst.w d2
  208.  bgt.s .ko
  209.  moveq #1,d2
  210. .ko:
  211.  move.w #31,d3
  212.  jsr ExplodeIntoBits
  213.  PROTMCHECK a0
  214.  movem.l (a7)+,d0-d7/a0-a6
  215.  
  216.  cmp.b #40,d2
  217.  blt .noexplode
  218.  
  219.  move.w #-1,12(a0)
  220.  move.w 12(a0),GraphicRoom(a0)
  221.  rts
  222.  
  223. .noexplode:
  224.  
  225.  movem.l d0-d7/a0-a6,-(a7)
  226.  sub.l ObjectPoints,a1
  227.  add.l #ObjRotated,a1
  228.  move.l (a1),Noisex
  229.  move.w #200,Noisevol
  230.  move.w screamsound,Samplenum
  231.  move.b #1,chanpick
  232.  clr.b notifplaying
  233.  st backbeat
  234.  move.b 1(a0),IDNUM
  235.  jsr MakeSomeNoise
  236.  movem.l (a7)+,d0-d7/a0-a6
  237.  
  238.  move.w #25,ThirdTimer(a0)
  239.  move.w 12(a0),GraphicRoom(a0)
  240.  rts
  241.  
  242. .notdeadyet:
  243.  clr.b damagetaken(a0)
  244.  movem.l d0-d7/a0-a6,-(a7)
  245.  sub.l ObjectPoints,a1
  246.  add.l #ObjRotated,a1
  247.  move.l (a1),Noisex
  248.  move.w #200,Noisevol
  249.  move.w screamsound,Samplenum
  250.  move.b #1,chanpick
  251.  clr.b notifplaying
  252.  move.b 1(a0),IDNUM
  253.  st backbeat
  254.  jsr MakeSomeNoise
  255.  movem.l (a7)+,d0-d7/a0-a6
  256.  
  257.  
  258. .noscream
  259.  
  260.  
  261.  move.w TempFrames,d0
  262.  sub.w d0,ObjTimer(a0)
  263.  bge.s .keepsamedir
  264.  
  265.  jsr GetRand
  266.  and.w #8190,d0
  267.  move.w d0,Facing(a0)
  268.  move.w #50,ObjTimer(a0)
  269.  
  270. .keepsamedir:
  271.  
  272.  move.w TempFrames,d0
  273.  sub.w d0,SecTimer(a0)
  274.  bge.s .nohiss
  275.  
  276.  jsr GetRand
  277.  lsr.w #6,d0
  278.  and.w #1,d0
  279.  add.w #17,d0
  280.  movem.l d0-d7/a0-a6,-(a7)
  281.  sub.l ObjectPoints,a1
  282.  add.l #ObjRotated,a1
  283.  move.l (a1),Noisex
  284.  move.w #100,Noisevol
  285.  move.w d0,Samplenum
  286.  move.b #1,chanpick
  287.  clr.b notifplaying
  288.  move.b 1(a0),IDNUM
  289.  st backbeat
  290.  jsr MakeSomeNoise
  291.  movem.l (a7)+,d0-d7/a0-a6
  292.  Jsr GetRand
  293.  lsr.w #6,d0
  294.  and.w #255,d0
  295.  add.w #300,d0
  296.  move.w d0,SecTimer(a0)
  297.  
  298. .nohiss:
  299.  
  300.  move.b ObjInTop(a0),ViewerTop
  301.  move.b PLR1_StoodInTop,TargetTop
  302.  move.l PLR1_Roompt,ToRoom
  303.  move.l objroom,FromRoom
  304.  move.w newx,Viewerx
  305.  move.w newz,Viewerz
  306.  move.w PLR1_xoff,Targetx
  307.  move.w PLR1_zoff,Targetz
  308.  move.l PLR1_yoff,d0
  309.  asr.l #7,d0
  310.  move.w d0,Targety
  311.  move.w 4(a0),Viewery
  312.  jsr CanItBeSeen
  313.  
  314.  clr.b 17(a0)
  315.  
  316.  tst.b CanSee
  317.  beq .carryonprowling
  318.  
  319.  move.b #1,17(a0)
  320.  
  321. .carryonprowling:
  322.  
  323.  move.b ObjInTop(a0),ViewerTop
  324.  move.b PLR2_StoodInTop,TargetTop
  325.  move.l PLR2_Roompt,ToRoom
  326.  move.l objroom,FromRoom
  327.  move.w newx,Viewerx
  328.  move.w newz,Viewerz
  329.  move.w PLR2_xoff,Targetx
  330.  move.w PLR2_zoff,Targetz
  331.  move.l PLR2_yoff,d0
  332.  asr.l #7,d0
  333.  move.w d0,Targety
  334.  move.w 4(a0),Viewery
  335.  jsr CanItBeSeen
  336.  
  337.  tst.b CanSee
  338.  beq .carryonprowling2
  339.  
  340.  or.b #2,17(a0)
  341.  
  342. .carryonprowling2:
  343.  
  344.  move.w 12(a0),GraphicRoom(a0)
  345.  rts
  346.  
  347. MutMarAttack:
  348.  
  349.  move.w 12(a0),d2
  350.  move.l ZoneAdds,a5
  351.  move.l (a5,d2.w*4),d0
  352.  add.l LEVELDATA,d0
  353.  move.l d0,objroom
  354.  jsr ViewpointToDraw
  355.  asl.l #2,d0
  356.  add.w alframe+2,d0
  357.  add.l #$000a0000,d0
  358.  move.l d0,8(a0)
  359.  
  360.  btst #0,17(a0)
  361.  beq MutMarAttackPLR2
  362.  btst #1,17(a0)
  363.  beq MutMarAttackPLR1
  364.  
  365.  move.l ObjectPoints,a1
  366.  move.w (a0),d0
  367.  move.w (a1,d0.w*8),d1
  368.  move.w 4(a1,d0.w*8),d2
  369.  
  370.  move.w PLR1_xoff,d3
  371.  move.w PLR1_zoff,d4
  372.  sub.w d1,d3
  373.  sub.w d2,d4
  374.  muls d3,d3
  375.  muls d4,d4
  376.  add.l d4,d3
  377.  move.w PLR2_xoff,d4
  378.  move.w PLR2_zoff,d5
  379.  sub.w d1,d4
  380.  sub.w d2,d5
  381.  muls d4,d4
  382.  muls d5,d5
  383.  add.l d5,d4
  384.  cmp.l d3,d4
  385.  ble MutMarAttackPLR2
  386.  
  387.  
  388. MutMarAttackPLR1:
  389.  
  390.  move.w TempFrames,d0
  391.  sub.w d0,FourthTimer(a0)
  392.  bgt.s .oktoshoot
  393.  move.w #50,ThirdTimer(a0)
  394. .oktoshoot:
  395.  
  396.  move.w 12(a0),d2
  397.  move.l ZoneAdds,a5
  398.  move.l (a5,d2.w*4),d0
  399.  add.l LEVELDATA,d0
  400.  move.l d0,objroom
  401.  
  402.  jsr ViewpointToDraw
  403.  
  404.  asl.l #2,d0
  405.  add.l #$a0000,d0
  406.  move.l d0,8(a0)
  407.  
  408.  move.w PLR1_xoff,newx
  409.  move.w PLR1_zoff,newz
  410.  move.w (a0),d1
  411.  move.l #ObjRotated,a6
  412.  move.l ObjectPoints,a1
  413.  lea (a1,d1.w*8),a1
  414.  lea (a6,d1.w*8),a6
  415.  move.w (a1),oldx
  416.  move.w 4(a1),oldz
  417.  move.w maxspd(a0),d2
  418.  muls.w TempFrames,d2
  419.  move.w d2,speed
  420.  move.w #80,Range
  421.  move.w 4(a0),d0
  422.  ext.l d0
  423.  asl.l #7,d0
  424.  sub.l #64*128,d0
  425.  move.l d0,newy
  426.  move.l d0,oldy
  427.  
  428.  move.b ObjInTop(a0),StoodInTop
  429.  movem.l d0/a0/a1/a3/a6/a4/d7,-(a7)
  430.  clr.b canshove
  431.  clr.b GotThere
  432.  jsr HeadTowardsAng
  433.  move.w #%1000000000,wallflags
  434.  
  435.   
  436.  clr.b wallbounce
  437.  Jsr MoveObject
  438.  movem.l (a7)+,d0/a0/a6/a1/a3/a4/d7
  439.  move.b StoodInTop,ObjInTop(a0)
  440.  
  441.  move.w AngRet,Facing(a0)
  442.  
  443.  move.l objroom,a2
  444.  move.w (a2),12(a0)
  445.  move.w newx,(a1)
  446.  move.w newz,4(a1)
  447.  
  448.  move.w (a2),d0
  449.  move.l #ZoneBrightTable,a5
  450.  move.l (a5,d0.w*4),d0
  451.  tst.b ObjInTop(a0)
  452.  bne.s .okbit
  453.  swap d0
  454. .okbit:
  455.  move.w d0,2(a0)
  456.  
  457.  move.l ToZoneFloor(a2),d0
  458.  tst.b ObjInTop(a0)
  459.  beq.s .notintop
  460.  move.l ToUpperFloor(a2),d0
  461. .notintop:
  462.  asr.l #7,d0
  463.  sub.w #64,d0
  464.  move.w d0,4(a0)
  465.  
  466.  moveq #0,d2
  467.  move.b damagetaken(a0),d2
  468.  beq .noscream
  469.  
  470.  sub.b d2,numlives(a0)
  471.  bgt .notdeadyet
  472.  
  473.  cmp.b #1,d2
  474.  ble .noexplode
  475.  
  476.  movem.l d0-d7/a0-a6,-(a7)
  477.  sub.l ObjectPoints,a1
  478.  add.l #ObjRotated,a1
  479.  move.l (a1),Noisex
  480.  move.w #400,Noisevol
  481.  move.w #14,Samplenum
  482.  move.b #1,chanpick
  483.  clr.b notifplaying
  484.  st backbeat
  485.  move.b 1(a0),IDNUM
  486.  jsr MakeSomeNoise
  487.  movem.l (a7)+,d0-d7/a0-a6
  488.  
  489.  movem.l d0-d7/a0-a6,-(a7)
  490.  move.w #0,d0
  491.  asr.w #2,d2
  492.  tst.w d2
  493.  bgt.s .ko
  494.  moveq #1,d2
  495. .ko:
  496.  move.w #31,d3
  497.  jsr ExplodeIntoBits
  498.  movem.l (a7)+,d0-d7/a0-a6
  499.  
  500.  cmp.b #40,d2
  501.  blt .noexplode
  502.  
  503.  move.w #-1,12(a0)
  504.  move.w 12(a0),GraphicRoom(a0)
  505.  rts
  506.  
  507. .noexplode:
  508.  
  509.  movem.l d0-d7/a0-a6,-(a7)
  510.  sub.l ObjectPoints,a1
  511.  add.l #ObjRotated,a1
  512.  move.l (a1),Noisex
  513.  move.w #200,Noisevol
  514.  move.w screamsound,Samplenum
  515.  move.b #1,chanpick
  516.  clr.b notifplaying
  517.  st backbeat
  518.  move.b 1(a0),IDNUM
  519.  jsr MakeSomeNoise
  520.  movem.l (a7)+,d0-d7/a0-a6
  521.  
  522.  move.w #25,ThirdTimer(a0)
  523.  
  524.  move.w 12(a0),GraphicRoom(a0)
  525.  rts
  526.  
  527. .notdeadyet:
  528.  clr.b damagetaken(a0)
  529.  movem.l d0-d7/a0-a6,-(a7)
  530.  sub.l ObjectPoints,a1
  531.  add.l #ObjRotated,a1
  532.  move.l (a1),Noisex
  533.  move.w #200,Noisevol
  534.  move.w screamsound,Samplenum
  535.  move.b #1,chanpick
  536.  clr.b notifplaying
  537.  move.b 1(a0),IDNUM
  538.  st backbeat
  539.  jsr MakeSomeNoise
  540.  movem.l (a7)+,d0-d7/a0-a6
  541.  
  542. .noscream
  543.  
  544. ; tst.b canshootgun
  545. ; beq .cantshoot
  546.  cmp.w #20,FourthTimer(a0)
  547.  bgt .cantshoot
  548.  
  549.  jsr GetRand
  550.  and.w #255,d0
  551.  add.w #50,d0
  552.  move.w d0,ThirdTimer(a0)
  553.  move.l (a6),Noisex
  554.  move.w #200,Noisevol
  555.  move.w #3,Samplenum
  556.  move.b #1,chanpick
  557.  clr.b notifplaying
  558.  movem.l a5/a1/a0,-(a7)
  559.  move.b 1(a0),IDNUM
  560.  jsr MakeSomeNoise
  561.  movem.l (a7)+,a5/a1/a0
  562.  
  563.  move.w #-100,2(a0)
  564.  
  565.  movem.l a0/a1,-(a7)
  566.  jsr GetRand
  567.  
  568.  move.l #ObjRotated,a6
  569.  move.w (a0),d1
  570.  lea (a6,d1.w*8),a6
  571.  
  572.  and.w #$7fff,d0
  573.  move.w (a6),d1
  574.  muls d1,d1
  575.  move.w 2(a6),d2
  576.  muls d2,d2
  577.  add.l d2,d1
  578.  asr.l #6,d1
  579.  ext.l d0
  580.  asl.l #2,d0
  581.  cmp.l d1,d0
  582.  bgt.s .hitplr
  583.  jsr SHOOTPLAYER1
  584.  bra.s .missplr
  585. .hitplr: 
  586.  move.l PLR1_Obj,a1
  587.  add.b #4,damagetaken(a1)
  588. .missplr:
  589.  movem.l (a7)+,a0/a1
  590.  
  591. .cantshoot:
  592.  
  593.  
  594.  move.w TempFrames,d0
  595.  sub.w d0,SecTimer(a0)
  596.  bge.s .nohiss
  597.  
  598.  movem.l d0-d7/a0-a6,-(a7)
  599.  sub.l ObjectPoints,a1
  600.  add.l #ObjRotated,a1
  601.  move.l (a1),Noisex
  602.  move.w #100,Noisevol
  603.  move.w #16,Samplenum
  604.  move.b #1,chanpick
  605.  clr.b notifplaying
  606.  move.b 1(a0),IDNUM
  607.  st backbeat
  608.  jsr MakeSomeNoise
  609.  movem.l (a7)+,d0-d7/a0-a6
  610.  
  611.  Jsr GetRand
  612.  lsr.w #6,d0
  613.  and.w #255,d0
  614.  add.w #300,d0
  615.  move.w d0,SecTimer(a0)
  616.  
  617. .nohiss:
  618.  
  619.  move.b ObjInTop(a0),ViewerTop
  620.  move.b PLR1_StoodInTop,TargetTop
  621.  move.l PLR1_Roompt,ToRoom
  622.  move.l objroom,FromRoom
  623.  move.w newx,Viewerx
  624.  move.w newz,Viewerz
  625.  move.w PLR1_xoff,Targetx
  626.  move.w PLR1_zoff,Targetz
  627.  move.l PLR1_yoff,d0
  628.  asr.l #7,d0
  629.  move.w d0,Targety
  630.  move.w 4(a0),Viewery
  631.  jsr CanItBeSeen
  632.  
  633.  clr.b 17(a0)
  634.  tst.b CanSee
  635.  beq .carryonprowling
  636.  
  637.  move.b #1,17(a0)
  638.  
  639. .carryonprowling:
  640.  
  641.  cmp.b #'n',mors
  642.  beq.s .carryonprowling2
  643.  
  644.  
  645.  move.b ObjInTop(a0),ViewerTop
  646.  move.b PLR2_StoodInTop,TargetTop
  647.  move.l PLR2_Roompt,ToRoom
  648.  move.l objroom,FromRoom
  649.  move.w newx,Viewerx
  650.  move.w newz,Viewerz
  651.  move.w PLR2_xoff,Targetx
  652.  move.w PLR2_zoff,Targetz
  653.  move.l PLR2_yoff,d0
  654.  asr.l #7,d0
  655.  move.w d0,Targety
  656.  move.w 4(a0),Viewery
  657.  jsr CanItBeSeen
  658.  
  659.  tst.b CanSee
  660.  beq .carryonprowling2
  661.  
  662.  or.b #2,17(a0)
  663.  
  664. .carryonprowling2:
  665.  
  666.  
  667.  move.w 12(a0),GraphicRoom(a0)
  668.  rts
  669.  
  670. *************************************************
  671.  
  672. MutMarAttackPLR2:
  673.  
  674.   
  675.  move.w TempFrames,d0
  676.  sub.w d0,FourthTimer(a0)
  677.  bgt.s .oktoshoot
  678.  move.w #50,ThirdTimer(a0)
  679. .oktoshoot:
  680.  
  681.  move.w 12(a0),d2
  682.  move.l ZoneAdds,a5
  683.  move.l (a5,d2.w*4),d0
  684.  add.l LEVELDATA,d0
  685.  move.l d0,objroom
  686.  
  687.  jsr ViewpointToDraw
  688.  
  689.  asl.l #2,d0
  690.  add.l #$a0000,d0
  691.  move.l d0,8(a0)
  692.  
  693.  move.w PLR2_xoff,newx
  694.  move.w PLR2_zoff,newz
  695.  move.w (a0),d1
  696.  move.l #ObjRotated,a6
  697.  move.l ObjectPoints,a1
  698.  lea (a1,d1.w*8),a1
  699.  lea (a6,d1.w*8),a6
  700.  move.w (a1),oldx
  701.  move.w 4(a1),oldz
  702.  move.w maxspd(a0),d2
  703.  muls.w TempFrames,d2
  704.  move.w d2,speed
  705.  move.w #80,Range
  706.  move.w 4(a0),d0
  707.  ext.l d0
  708.  asl.l #7,d0
  709.  sub.l #64*128,d0
  710.  move.l d0,newy
  711.  move.l d0,oldy
  712.  
  713.  move.b ObjInTop(a0),StoodInTop
  714.  movem.l d0/a0/a1/a3/a6/a4/d7,-(a7)
  715.  clr.b canshove
  716.  clr.b GotThere
  717.  jsr HeadTowardsAng
  718.  move.w #%1000000000,wallflags
  719.  
  720.   
  721.  clr.b wallbounce
  722.  Jsr MoveObject
  723.  movem.l (a7)+,d0/a0/a1/a3/a6/a4/d7
  724.  move.b StoodInTop,ObjInTop(a0)
  725.  
  726.  move.w AngRet,Facing(a0)
  727.  
  728.  move.l objroom,a2
  729.  move.w (a2),12(a0)
  730.  move.w newx,(a1)
  731.  move.w newz,4(a1)
  732.  
  733.  move.w (a2),d0
  734.  move.l #ZoneBrightTable,a5
  735.  move.l (a5,d0.w*4),d0
  736.  tst.b ObjInTop(a0)
  737.  bne.s .okbit
  738.  swap d0
  739. .okbit:
  740.  move.w d0,2(a0)
  741.  
  742.  move.l ToZoneFloor(a2),d0
  743.  tst.b ObjInTop(a0)
  744.  beq.s .notintop
  745.  move.l ToUpperFloor(a2),d0
  746. .notintop:
  747.  asr.l #7,d0
  748.  sub.w #64,d0
  749.  move.w d0,4(a0)
  750.  
  751.  moveq #0,d2
  752.  move.b damagetaken(a0),d2
  753.  beq .noscream
  754.  
  755.  sub.b d2,numlives(a0)
  756.  bgt .notdeadyet
  757.  
  758.  cmp.b #1,d2
  759.  ble.s .noexplode
  760.  
  761.  movem.l d0-d7/a0-a6,-(a7)
  762.  sub.l ObjectPoints,a1
  763.  add.l #ObjRotated,a1
  764.  move.l (a1),Noisex
  765.  move.w #400,Noisevol
  766.  move.w #14,Samplenum
  767.  move.b #1,chanpick
  768.  clr.b notifplaying
  769.  st backbeat
  770.  move.b 1(a0),IDNUM
  771.  jsr MakeSomeNoise
  772.  movem.l (a7)+,d0-d7/a0-a6
  773.  
  774.  movem.l d0-d7/a0-a6,-(a7)
  775.  move.w #0,d0
  776.  tst.w d2
  777.  bgt.s .ko
  778.  moveq #1,d2
  779. .ko:
  780.  move.w #31,d3
  781.  jsr ExplodeIntoBits
  782.  movem.l (a7)+,d0-d7/a0-a6
  783.  
  784.  cmp.b #10,d2
  785.  blt .noexplode
  786.  
  787.  move.w #-1,12(a0)
  788.  move.w 12(a0),GraphicRoom(a0)
  789.  rts
  790.  
  791. .noexplode:
  792.  
  793.  movem.l d0-d7/a0-a6,-(a7)
  794.  sub.l ObjectPoints,a1
  795.  add.l #ObjRotated,a1
  796.  move.l (a1),Noisex
  797.  move.w #200,Noisevol
  798.  move.w screamsound,Samplenum
  799.  move.b #1,chanpick
  800.  clr.b notifplaying
  801.  st backbeat
  802.  move.b 1(a0),IDNUM
  803.  jsr MakeSomeNoise
  804.  movem.l (a7)+,d0-d7/a0-a6
  805.  
  806.  move.w #25,ThirdTimer(a0)
  807.  
  808.  move.w 12(a0),GraphicRoom(a0)
  809.  rts
  810.  
  811. .notdeadyet:
  812.  clr.b damagetaken(a0)
  813.  movem.l d0-d7/a0-a6,-(a7)
  814.  sub.l ObjectPoints,a1
  815.  add.l #ObjRotated,a1
  816.  move.l (a1),Noisex
  817.  move.w #200,Noisevol
  818.  move.w screamsound,Samplenum
  819.  move.b #1,chanpick
  820.  clr.b notifplaying
  821.  move.b 1(a0),IDNUM
  822.  st backbeat
  823.  jsr MakeSomeNoise
  824.  movem.l (a7)+,d0-d7/a0-a6
  825.  
  826.  
  827.  
  828. .noscream
  829.  
  830. ; tst.b canshootgun
  831. ; beq .cantshoot
  832.  cmp.w #20,FourthTimer(a0)
  833.  bge .cantshoot
  834.  
  835.  jsr GetRand
  836.  and.w #255,d0
  837.  add.w #200,d0
  838.  move.w d0,ThirdTimer(a0)
  839.  
  840.  move.l (a6),Noisex
  841.  move.w #200,Noisevol
  842.  move.w #3,Samplenum
  843.  move.b #1,chanpick
  844.  clr.b notifplaying
  845.  movem.l a5/a1/a0,-(a7)
  846.  move.b 1(a0),IDNUM
  847.  jsr MakeSomeNoise
  848.  movem.l (a7)+,a5/a1/a0
  849.  
  850.  move.w #-100,2(a0)
  851.  
  852.  movem.l a0/a1,-(a7)
  853.  jsr GetRand
  854.  
  855.  move.l #ObjRotated,a6
  856.  move.w (a0),d1
  857.  lea (a6,d1.w*8),a6
  858.  
  859.  and.w #$7fff,d0
  860.  move.w (a6),d1
  861.  muls d1,d1
  862.  move.w 2(a6),d2
  863.  muls d2,d2
  864.  add.l d2,d1
  865.  asr.l #6,d1
  866.  ext.l d0
  867.  asl.l #2,d0
  868.  cmp.l d1,d0
  869.  bgt.s .hitplr
  870.  jsr SHOOTPLAYER2
  871.  bra.s .missplr
  872. .hitplr: 
  873.  move.l PLR2_Obj,a1
  874.  add.b #4,damagetaken(a1)
  875. .missplr:
  876.  movem.l (a7)+,a0/a1
  877.  
  878. .cantshoot:
  879.  
  880.  
  881.  move.w TempFrames,d0
  882.  sub.w d0,SecTimer(a0)
  883.  bge.s .nohiss
  884.  
  885.  movem.l d0-d7/a0-a6,-(a7)
  886.  sub.l ObjectPoints,a1
  887.  add.l #ObjRotated,a1
  888.  move.l (a1),Noisex
  889.  move.w #100,Noisevol
  890.  move.w #16,Samplenum
  891.  move.b #1,chanpick
  892.  clr.b notifplaying
  893.  move.b 1(a0),IDNUM
  894.  st backbeat
  895.  jsr MakeSomeNoise
  896.  movem.l (a7)+,d0-d7/a0-a6
  897.  
  898.  Jsr GetRand
  899.  lsr.w #6,d0
  900.  and.w #255,d0
  901.  add.w #300,d0
  902.  move.w d0,SecTimer(a0)
  903.  
  904. .nohiss:
  905.  
  906.  move.b ObjInTop(a0),ViewerTop
  907.  move.b PLR1_StoodInTop,TargetTop
  908.  move.l PLR1_Roompt,ToRoom
  909.  move.l objroom,FromRoom
  910.  move.w newx,Viewerx
  911.  move.w newz,Viewerz
  912.  move.w PLR1_xoff,Targetx
  913.  move.w PLR1_zoff,Targetz
  914.  move.l PLR1_yoff,d0
  915.  asr.l #7,d0
  916.  move.w d0,Targety
  917.  move.w 4(a0),Viewery
  918.  jsr CanItBeSeen
  919.  
  920.  clr.b 17(a0)
  921.  tst.b CanSee
  922.  beq .carryonprowling
  923.  
  924.  move.b #1,17(a0)
  925.  
  926. .carryonprowling:
  927.  
  928.  cmp.b #'n',mors
  929.  beq.s .carryonprowling2
  930.  
  931.  
  932.  move.b ObjInTop(a0),ViewerTop
  933.  move.b PLR2_StoodInTop,TargetTop
  934.  move.l PLR2_Roompt,ToRoom
  935.  move.l objroom,FromRoom
  936.  move.w newx,Viewerx
  937.  move.w newz,Viewerz
  938.  move.w PLR2_xoff,Targetx
  939.  move.w PLR2_zoff,Targetz
  940.  move.l PLR2_yoff,d0
  941.  asr.l #7,d0
  942.  move.w d0,Targety
  943.  move.w 4(a0),Viewery
  944.  jsr CanItBeSeen
  945.  
  946.  tst.b CanSee
  947.  beq .carryonprowling2
  948.  
  949.  or.b #2,17(a0)
  950.  
  951. .carryonprowling2:
  952.  
  953.  
  954.  
  955.  
  956.  move.w 12(a0),GraphicRoom(a0)
  957.  rts
  958.  
  959.  
  960.